Simple Grantをローカルでビルドしてみる
public.icon
詰まった
もう一回落ち着いてやってみる
backendとfrontendのそれぞれにREADMEがあるから読めとのこと
まずはbackendの方から
1. priovider.service.tsを変更
countryをJPNに
2. npm install
3. .envを作る
$ cp .env.example .env
stripeのkey: sk~で始まるやつ
$ npm run docker:dev:up
これで2つ(simplegrants-database, simplegrants-backend)が起動する
$ npm run setup
これが失敗する
~/s/9/s/backend (main|✚1) $ npm run setup
> simplegrants-backend@0.0.1 setup
> ./prisma-helper.sh 'npx prisma migrate deploy && npx prisma db seed'
Environment variables loaded from .env
Prisma schema loaded from prisma/schema.prisma
Datasource "db": PostgreSQL database "postgres", schema "public" at "localhost:5432"
Error: P1010: User was denied access on the database .public
DATABASE_CONTAINER=localhostに変更して再度確認
同じエラーが出る
一旦.envのpostgresの設定を見直してみた
POSTGRES_USER=postgres
POSTGRES_PASSWORD=いつものやつ
これで動いたような気がするtkgshn.icon*5
$ stripe listen --forward-to localhost:3000/checkout/webhook
これも動いた
次はfrontend
$ yarn install
$ cp .env.example .env.local
.env.localを生成
NextAuthを使用する、今回はGoogleのOuthを使うので、すでに作ったやつを入力 NEXTAUTH_SECRET=も入力
NEXT_PUBLIC_FINGERPRINT_KEYも入力
$ yarn dev -p 3001
name: 'GetUserByAccountError',
code: undefined
}
開いた
一旦他のdokerを消して、npm run start:devだけで走らせてみる
これは/で実行しなければいけない
なるほど、
event - compiled client and server successfully in 211 ms (452 modules)
Invalid p.account.findUnique() invocation in
/app/node_modules/@next-auth/prisma-adapter/dist/index.js:11:45
8 getUserByEmail: (email) => p.user.findUnique({ where: { email } }),
9 async getUserByAccount(provider_providerAccountId) {
10 var _a;
→ 11 const account = await p.account.findUnique(
User was denied access on the database .public {
message: '\n' +
'Invalid p.account.findUnique() invocation in\n' +
'/app/node_modules/@next-auth/prisma-adapter/dist/index.js:11:45\n' +
'\n' +
' 8 getUserByEmail: (email) => p.user.findUnique({ where: { email } }),\n' +
' 9 async getUserByAccount(provider_providerAccountId) {\n' +
' 10 var _a;\n' +
'→ 11 const account = await p.account.findUnique(\n' +
'User was denied access on the database .public',
stack: 'Error: \n' +
'Invalid p.account.findUnique() invocation in\n' +
'/app/node_modules/@next-auth/prisma-adapter/dist/index.js:11:45\n' +
'\n' +
' 8 getUserByEmail: (email) => p.user.findUnique({ where: { email } }),\n' +
' 9 async getUserByAccount(provider_providerAccountId) {\n' +
' 10 var _a;\n' +
'→ 11 const account = await p.account.findUnique(\n' +
'User was denied access on the database .public\n' +
' at fn.handleRequestError (/app/node_modules/.prisma/client/runtime/library.js:174:6750)\n' +
' at fn.handleAndLogRequestError (/app/node_modules/.prisma/client/runtime/library.js:174:5907)\n' +
' at /app/node_modules/.prisma/client/runtime/library.js:177:3087\n' +
' at async /app/node_modules/.prisma/client/runtime/library.js:177:3294\n' +
' at async t._executeRequest (/app/node_modules/.prisma/client/runtime/library.js:177:10748)\n' +
' at async t._request (/app/node_modules/.prisma/client/runtime/library.js:177:10477)\n' +
' at async getUserByAccount (/app/node_modules/@next-auth/prisma-adapter/dist/index.js:11:29)',
name: 'Error'
}
Invalid p.account.findUnique() invocation in
/app/node_modules/@next-auth/prisma-adapter/dist/index.js:11:45
8 getUserByEmail: (email) => p.user.findUnique({ where: { email } }),
9 async getUserByAccount(provider_providerAccountId) {
10 var _a;
→ 11 const account = await p.account.findUnique(
User was denied access on the database .public Error:
Invalid p.account.findUnique() invocation in
/app/node_modules/@next-auth/prisma-adapter/dist/index.js:11:45
8 getUserByEmail: (email) => p.user.findUnique({ where: { email } }),
9 async getUserByAccount(provider_providerAccountId) {
10 var _a;
→ 11 const account = await p.account.findUnique(
User was denied access on the database .public
at fn.handleRequestError (/app/node_modules/.prisma/client/runtime/library.js:174:6750)
at fn.handleAndLogRequestError (/app/node_modules/.prisma/client/runtime/library.js:174:5907)
at /app/node_modules/.prisma/client/runtime/library.js:177:3087
at async /app/node_modules/.prisma/client/runtime/library.js:177:3294
at async t._executeRequest (/app/node_modules/.prisma/client/runtime/library.js:177:10748)
at async t._request (/app/node_modules/.prisma/client/runtime/library.js:177:10477)
at async getUserByAccount (/app/node_modules/@next-auth/prisma-adapter/dist/index.js:11:29) {
name: 'GetUserByAccountError',
code: undefined
}
これもいけた
次は、Poolが作れない問題
一旦、.envを
DATABASE_CONTAINER=simplegrants-database
# DATABASE_CONTAINER=localhost
にしてみる
なんか動いた
でも、
起動した後、
つまり、テスト用データのGrantは見れる
https://gyazo.com/a61821aa2ed32c76bb55281bf2d36f30
https://gyazo.com/053228b1cf76a418aaac5ce7d3dc7c88
ここに対して寄付することもできる
これは3$寄付してみた様子
https://gyazo.com/d009e9c3c7a8c96eab9627a5e66f4c9e
ちなみに、profileのページでは寄付してもこっち側からdonationしたのは反映されていない
https://gyazo.com/0b6d17c859dcbb8b95df6e5e18cd51df
https://gyazo.com/84d0bed9c4e049fc762729aa1124b77d
なぜか作ったのはみれる
でも、一覧には表示されない
ここで送信できない
3000番が応答しなくなる
https://gyazo.com/943a3edc2b3ea47ae0a9415cdd923974
1. AWSのリージョンの設定
本来はbackend側にawsの設定が書かれているっぽい?
AWS_REGION
AWS_ACCESS_KEY
AWS_SECRET_KEY
AWS_BUCKET_NAME
"@aws-sdk/client-s3": "^3.304.0",
、SDK が最初に認証情報をチェックする場所はユーザーの環境変数です。SDK は getenv() 関数を使用して、環境変数の AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY、および AWS_SESSION_TOKEN を探します。これらの認証情報は、環境の認証情報と呼ばれます。これらの値を取得する方法については、を参照してください。短期認証情報を使用して認証するにAWSSDK とツールリファレンスガイド。
とりあえずenvにawsアカウントを設定してみた
https://gyazo.com/1ce48d67203815b80e91f77b2ca13913
一応grantを作ることはできた
ChatGPT.icon
403 (Forbidden) エラーは、AWS S3バケットに対してアクセス権限がない、または不足している場合に発生することが多いです。この問題を解決するためにはいくつかの手段が考えられます:
AmazonS3FullAccessを与えてみるtkgshn.icon
これでアップロードはできてるっぽい
https://gyazo.com/380304f59b1d99c2b6caebf427e4df26
追加したGrantsがリストに表示されていない
[
{
"AllowedHeaders": [
"*"
],
"AllowedMethods": [
"PUT",
"POST",
"DELETE"
],
"AllowedOrigins": [
],
"ExposeHeaders": []
}
]
Unverified Grantという概念がある?
adminsになる必要があるっぽい
### Creating Admins
Because authentication relies on NextAuth, users will only be created when someone has logged in to the platform. Therefore, the best way to create the first admin is to login to the platform for the first time, and manually change the Role for the specific user to an Admin.
Subsequent admin changes can be done using the API, which is documented in Swagger.
~/s/9/simplegrants (main|✔) $ curl -X 'POST' \
:3000/auth/admin/grant' \
-H 'accept: appli
cation/json' \
-H 'Content-Type:
application/json' \
-d '{
"email": "takagishuns
uke1129@gmail.com"
}'
{"statusCode":403,"message":"Forbidden resource","error":"Forbidden"}⏎
403?tkgshn.icon
これは動く
{"statusCode":403,"message":"Forbidden resource","error":"Forbidden"}
これは動かない
これは動く
posgresの中に入って操作したらいけた
自分が作成したgrantをもとに、poolを作ろうとしてもうまくいかない
User is not an ecosystem builderって表示される
$ psql -U postgres
$ \dt
これでtableが見れる
postgres=# \dt
List of relations
Schema | Name | Type | Owner
--------+----------------------------------+-------+----------
public | Account | table | postgres
ちゃんとサインアップした2つしかない
public | Checkout | table | postgres
これは反映されている。Stripと一致する
public | Contribution | table | postgres
contributionが、いまいち反映されていない気がする
public | EcosystemBuilder | table | postgres
InviteCodeをもらったUserのみがこれになる
takagishunsuke1129@gmail.comを無理やり適応した
public | Grant | table | postgres
プロジェクトのこと
public | InviteCodes | table | postgres
まだ使ってないinviteCodeが、True(t)/False(f)で書かれている
public | MatchedFund | table | postgres
中身なし
public | MatchingRound | table | postgres
Poolと同意義
public | PaymentAccount | table | postgres
よくわかっていない
public | PaymentMethod | table | postgres
よくわかっていない
public | PaymentProvider | table | postgres
Stripしか入れてない
public | Session | table | postgres
多分Accountと同じ?
public | User | table | postgres
いっぱいある。Adminとかの要素を作ることができる
takagishunsuke1129@gmail.comはroleがAdminになっている
shunsuke.takagi@civichat.jpはroleがUserになっている
public | VerificationToken | table | postgres
中身なし
public | _EcosystemBuilderToMatchingRound | table | postgres
AとBが入っている
public | _GrantToMatchingRound | table | postgres
いっぱい入ってるけどわからん
A | clg3bs740000rx6s55eqf5tby
B | clg3bs7400012x6s50gt01qol
A | clg3bs740000sx6s55d5y8d4m
B | clg3bs7400012x6s50gt01qol
A | clg3bs7400013x6s5a29q1m46
B | clg3bs7400017x6s5e7t96pzk
A | clg3bs7400014x6s53234dnw2
B | clg3bs7400017x6s5e7t96pzk
A | clg3bs7400015x6s50hl7d261
B | clg3bs7400017x6s5e7t96pzk
A | clg3bs7400016x6s584cnbzhz
B | clg3bs7400017x6s5e7t96pzk
A | clm25zj5p00040vop4ow4egei
B | clm38bxxi00060vop1rfqgsuk
public | _GrantToUser | table | postgres
いっぱい入ってるけどわからん
トランザクション履歴みたいなの?
public | _prisma_migrations | table | postgre
ちゃんとSQLを書けば得たお金がわかるっぽいけど、まだプロジェクト側のdashbordとかが整備されていない感じかな?
4日ほどOSSをローカルの環境で検証してみた結果、ドキュメントは非常に完成されているように見えるが、実際には動かないみたいだ。
Sign-upした後、Adminになるフロントエンドのページがない
(adminをtrueにする必要がある)
作成したGrantをVerifyするフロントエンドのページがない
(SQLを触ってgrantのデータベースから、verifyをtrueにする必要がある)
Poolを作るフロントエンドのページがない
(ecosystem builderをtrueにする必要がある、その際にはinvitation codeが必要だが、これも機能としては実装されていないので無理やしSQLを叩く必要がある。)
これは自分が検証しきれていないのかもしれないが、Stripeでcheckoutした後に、Contributionに反映されていない
元々はforkさえすれば個別の環境で動かせると思っていたが、そうではなかった。これらの結果をもとに、今後どう動いていくか悩んでいる。
なので、OwockiのSimple grantに対する展望や、次のステップを教えてほしい。